๋ณต์กํ React ์ ํ๋ฆฌ์ผ์ด์ ์์ React Suspense List๊ฐ ๋ก๋ฉ ์ํ๋ฅผ ์กฐ์ ํ์ฌ ์ฒด๊ฐ ์ฑ๋ฅ๊ณผ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์. ์ค์ฉ์ ์ธ ์์ ์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ์ดํด๋ด ๋๋ค.
React Suspense List: ํฅ์๋ UX๋ฅผ ์ํ ๋ก๋ฉ ์ํ ์กฐ์
ํ๋ ์น ์ ํ๋ฆฌ์ผ์ด์
์์ ๋น๋๊ธฐ ๋ฐ์ดํฐ ํ์นญ๊ณผ ์ฌ๋ฌ ์ปดํฌ๋ํธ์ ๋ ๋๋ง์ ๊ด๋ฆฌํ๋ ๊ฒ์ ์ข
์ข
์ด์ํ ์ฌ์ฉ์ ๊ฒฝํ์ผ๋ก ์ด์ด์ง ์ ์์ต๋๋ค. ์ปดํฌ๋ํธ๊ฐ ์์ธก ๋ถ๊ฐ๋ฅํ ์์๋ก ๋ก๋๋์ด ๋ ์ด์์ ์ํํธ์ ์๊ฐ์ ๋ถ์ผ์น๋ฅผ ์ ๋ฐํ ์ ์์ต๋๋ค. React์ <SuspenseList>
์ปดํฌ๋ํธ๋ Suspense ๊ฒฝ๊ณ(boundary)๊ฐ ์ฝํ
์ธ ๋ฅผ ํ์ํ๋ ์์๋ฅผ ์กฐ์ ํ์ฌ ๋ ๋ถ๋๋ฝ๊ณ ์์ธก ๊ฐ๋ฅํ ๋ก๋ฉ ๊ฒฝํ์ ์ ๊ณตํ๋ ๊ฐ๋ ฅํ ํด๊ฒฐ์ฑ
์ ์ ์ํฉ๋๋ค. ์ด ํฌ์คํธ์์๋ React ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๊ธฐ ์ํด Suspense List๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ํ ํฌ๊ด์ ์ธ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค.
React Suspense์ Suspense ๊ฒฝ๊ณ ์ดํดํ๊ธฐ
Suspense List์ ๋ํด ์์๋ณด๊ธฐ ์ ์ React Suspense์ ๊ธฐ๋ณธ์ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. Suspense๋ ํน์ ์กฐ๊ฑด(์ผ๋ฐ์ ์ผ๋ก API์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ๊ณผ ๊ฐ์ ํ๋ก๋ฏธ์ค์ ํด๊ฒฐ)์ด ์ถฉ์กฑ๋ ๋๊น์ง ์ปดํฌ๋ํธ์ ๋ ๋๋ง์ "์ผ์ ์ค๋จ"ํ ์ ์๊ฒ ํด์ฃผ๋ React ๊ธฐ๋ฅ์ ๋๋ค. ์ด๋ฅผ ํตํด ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํด์ง ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๋์ ํด๋ฐฑ UI(์: ๋ก๋ฉ ์คํผ๋)๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
Suspense ๊ฒฝ๊ณ(boundary)๋ <Suspense>
์ปดํฌ๋ํธ๋ก ์ ์๋ฉ๋๋ค. ์ด๋ ๊ฒฝ๊ณ ๋ด์ ์ปดํฌ๋ํธ๊ฐ ์ผ์ ์ค๋จ๋ ๋์ ๋ ๋๋งํ UI๋ฅผ ์ง์ ํ๋ fallback
prop์ ๋ฐ์ต๋๋ค. ๋ค์ ์์๋ฅผ ์ดํด๋ณด์ธ์:
<Suspense fallback={<div>๋ก๋ฉ ์ค...</div>}>
<MyComponent />
</Suspense>
์ด ์์์, ๋ง์ฝ <MyComponent>
๊ฐ (์: ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๊ธฐ ๋๋ฌธ์) ์ผ์ ์ค๋จ๋๋ฉด, <MyComponent>
๊ฐ ๋ ๋๋ง๋ ์ค๋น๊ฐ ๋ ๋๊น์ง "๋ก๋ฉ ์ค..." ๋ฉ์์ง๊ฐ ํ์๋ฉ๋๋ค.
๋ฌธ์ ์ : ์กฐ์ ๋์ง ์์ ๋ก๋ฉ ์ํ
Suspense๋ ๋น๋๊ธฐ ๋ก๋ฉ์ ์ฒ๋ฆฌํ๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ง๋ง, ์ฌ๋ฌ ์ปดํฌ๋ํธ์ ๋ก๋ฉ ์์๋ฅผ ๋ณธ์ง์ ์ผ๋ก ์กฐ์ ํ์ง๋ ์์ต๋๋ค. ์กฐ์ ์ด ์์ผ๋ฉด ์ปดํฌ๋ํธ๋ค์ด ๋ค์ฃฝ๋ฐ์ฃฝ์ผ๋ก ๋ก๋๋์ด ๋ ์ด์์ ์ํํธ์ ์ข์ง ์์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๋ฐํ ์ ์์ต๋๋ค. ์ฌ๋ฌ ์น์ (์: ์ฌ์ฉ์ ์ ๋ณด, ๊ฒ์๋ฌผ, ํ๋ก์)์ด ์๋ ํ๋กํ ํ์ด์ง๋ฅผ ์์ํด ๋ณด์ธ์. ๊ฐ ์น์ ์ด ๋ ๋ฆฝ์ ์ผ๋ก ์ผ์ ์ค๋จ๋๋ฉด ํ์ด์ง๊ฐ ๋๊ธฐ๊ณ ์์ธก ๋ถ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ๋ก๋๋ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, ์ฌ์ฉ์ ์ ๋ณด ํ์นญ์ ๋งค์ฐ ๋น ๋ฅด์ง๋ง ์ฌ์ฉ์์ ๊ฒ์๋ฌผ ํ์นญ์ด ๋๋ฆฌ๋ค๋ฉด, ์ฌ์ฉ์ ์ ๋ณด๋ ์ฆ์ ๋ํ๋๊ณ ๊ฒ์๋ฌผ์ด ๋ ๋๋ง๋๊ธฐ๊น์ง ์ ์ฌ์ ์ผ๋ก ์ด์ํ ์ง์ฐ์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ ๋๋ฆฐ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด๋ ๋ณต์กํ ์ปดํฌ๋ํธ์์ ํนํ ๋๋๋ฌ์ง ์ ์์ต๋๋ค.
React Suspense List ์๊ฐ
<SuspenseList>
๋ Suspense ๊ฒฝ๊ณ๊ฐ ํ์๋๋ ์์๋ฅผ ์ ์ดํ ์ ์๊ฒ ํด์ฃผ๋ React ์ปดํฌ๋ํธ์
๋๋ค. ๋ก๋ฉ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ๋ ๊ฐ์ง ์ฃผ์ ์์ฑ์ ์ ๊ณตํฉ๋๋ค:
- revealOrder:
<SuspenseList>
์ ์์๋ค์ด ํ์๋์ด์ผ ํ๋ ์์๋ฅผ ์ง์ ํฉ๋๋ค. ๊ฐ๋ฅํ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:forwards
: ์ปดํฌ๋ํธ ํธ๋ฆฌ์ ๋ํ๋๋ ์์๋๋ก ์์์ ํ์ํฉ๋๋ค.backwards
: ์์์ ์ญ์์ผ๋ก ํ์ํฉ๋๋ค.together
: ๋ชจ๋ ์์์ด ํด๊ฒฐ๋ ํ ๋์์ ํ์ํฉ๋๋ค.
- tail: ํ ํญ๋ชฉ์ด ์์ง ๋ณด๋ฅ ์ค์ผ ๋ ๋๋จธ์ง ํ์๋์ง ์์ ํญ๋ชฉ๋ค์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง ๊ฒฐ์ ํฉ๋๋ค. ๊ฐ๋ฅํ ๊ฐ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
suspense
: ๋๋จธ์ง ๋ชจ๋ ํญ๋ชฉ์ ๋ํด ํด๋ฐฑ์ ํ์ํฉ๋๋ค.collapse
: ๋๋จธ์ง ํญ๋ชฉ์ ๋ํ ํด๋ฐฑ์ ํ์ํ์ง ์๊ณ , ์ค๋น๋ ๋๊น์ง ํจ๊ณผ์ ์ผ๋ก ์ถ์์ํต๋๋ค.
Suspense List ์ฌ์ฉ์ ์ค์ฉ์ ์ธ ์์
Suspense List๊ฐ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๋ ๋ฐ ์ด๋ป๊ฒ ์ฌ์ฉ๋ ์ ์๋์ง ๋ช ๊ฐ์ง ์ค์ฉ์ ์ธ ์์ ๋ฅผ ํตํด ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์์ 1: ์์ฐจ ๋ก๋ฉ (revealOrder="forwards")
์ ๋ชฉ, ์ค๋ช
, ์ด๋ฏธ์ง๊ฐ ์๋ ์ ํ ํ์ด์ง๋ฅผ ์์ํด ๋ณด์ธ์. ๋ ๋ถ๋๋ฝ๊ณ ์ ์ง์ ์ธ ๋ก๋ฉ ๊ฒฝํ์ ๋ง๋ค๊ธฐ ์ํด ์ด๋ฌํ ์์๋ค์ ์์ฐจ์ ์ผ๋ก ๋ก๋ํ๊ณ ์ถ์ ์ ์์ต๋๋ค. <SuspenseList>
๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๋ฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
<SuspenseList revealOrder="forwards" tail="suspense">
<Suspense fallback={<div>์ ๋ชฉ ๋ก๋ฉ ์ค...</div>}>
<ProductTitle product={product} />
</Suspense>
<Suspense fallback={<div>์ค๋ช
๋ก๋ฉ ์ค...</div>}>
<ProductDescription product={product} />
</Suspense>
<Suspense fallback={<div>์ด๋ฏธ์ง ๋ก๋ฉ ์ค...</div>}>
<ProductImage imageUrl={product.imageUrl} />
</Suspense>
</SuspenseList>
์ด ์์์๋ <ProductTitle>
์ด ๋จผ์ ๋ก๋๋ฉ๋๋ค. ๋ก๋๊ฐ ์๋ฃ๋๋ฉด <ProductDescription>
์ด ๋ก๋๋๊ณ , ๋ง์ง๋ง์ผ๋ก <ProductImage>
๊ฐ ๋ก๋๋ฉ๋๋ค. tail="suspense"
๋ ์ปดํฌ๋ํธ ์ค ์ด๋ ํ๋๋ผ๋ ์์ง ๋ก๋ฉ ์ค์ธ ๊ฒฝ์ฐ ๋๋จธ์ง ์ปดํฌ๋ํธ๋ค์ ํด๋ฐฑ์ด ํ์๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
์์ 2: ์ญ์ ๋ก๋ฉ (revealOrder="backwards")
์ด๋ค ๊ฒฝ์ฐ์๋ ์ฝํ ์ธ ๋ฅผ ์ญ์์ผ๋ก ๋ก๋ํ๊ณ ์ถ์ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์์ ๋ฏธ๋์ด ํผ๋์์๋ ์ต์ ๊ฒ์๋ฌผ์ ๋จผ์ ๋ก๋ํ๊ณ ์ถ์ ์ ์์ต๋๋ค. ๋ค์์ ๊ทธ ์์ ๋๋ค:
<SuspenseList revealOrder="backwards" tail="suspense">
{posts.map(post => (
<Suspense key={post.id} fallback={<div>๊ฒ์๋ฌผ ๋ก๋ฉ ์ค...</div>}>
<Post post={post} />
</Suspense>
)).reverse()}
</SuspenseList>
posts
๋ฐฐ์ด์ ์ฌ์ฉ๋ .reverse()
๋ฉ์๋์ ์ฃผ๋ชฉํ์ธ์. ์ด๋ <SuspenseList>
๊ฐ ๊ฒ์๋ฌผ์ ์ญ์์ผ๋ก ํ์ํ์ฌ ๊ฐ์ฅ ์ต๊ทผ ๊ฒ์๋ฌผ์ ๋จผ์ ๋ก๋ํ๋๋ก ๋ณด์ฅํฉ๋๋ค.
์์ 3: ํจ๊ป ๋ก๋ฉํ๊ธฐ (revealOrder="together")
์ค๊ฐ ๋ก๋ฉ ์ํ๋ฅผ ํผํ๊ณ ๋ชจ๋ ์ปดํฌ๋ํธ๊ฐ ์ค๋น๋์์ ๋ ํ ๋ฒ์ ํ์ํ๊ณ ์ถ๋ค๋ฉด, revealOrder="together"
๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
<SuspenseList revealOrder="together" tail="suspense">
<Suspense fallback={<div>A ๋ก๋ฉ ์ค...</div>}>
<ComponentA />
</Suspense>
<Suspense fallback={<div>B ๋ก๋ฉ ์ค...</div>}>
<ComponentB />
</Suspense>
</SuspenseList>
์ด ๊ฒฝ์ฐ, <ComponentA>
์ <ComponentB>
๋ชจ๋ ๋์์ ๋ก๋๋ฅผ ์์ํฉ๋๋ค. ๊ทธ๋ฌ๋ *๋* ์ปดํฌ๋ํธ๊ฐ ๋ชจ๋ ๋ก๋๋ฅผ ๋ง์ณค์ ๋๋ง ํ์๋ฉ๋๋ค. ๊ทธ๋๊น์ง๋ ํด๋ฐฑ UI๊ฐ ํ์๋ฉ๋๋ค.
์์ 4: `tail="collapse"` ์ฌ์ฉํ๊ธฐ
tail="collapse"
์ต์
์ ํ์๋์ง ์์ ํญ๋ชฉ์ ๋ํ ํด๋ฐฑ์ ํ์ํ์ง ์์ผ๋ ค ํ ๋ ์ ์ฉํฉ๋๋ค. ์ด๋ ์๊ฐ์ ๋
ธ์ด์ฆ๋ฅผ ์ต์ํํ๊ณ ์ปดํฌ๋ํธ๊ฐ ์ค๋น๋์์ ๋๋ง ํ์ํ๊ณ ์ถ์ ๋ ๋์์ด ๋ ์ ์์ต๋๋ค.
<SuspenseList revealOrder="forwards" tail="collapse">
<Suspense fallback={<div>A ๋ก๋ฉ ์ค...</div>}>
<ComponentA />
</Suspense>
<Suspense fallback={<div>B ๋ก๋ฉ ์ค...</div>}>
<ComponentB />
</Suspense>
</SuspenseList>
tail="collapse"
๋ฅผ ์ฌ์ฉํ๋ฉด, <ComponentA>
๊ฐ ์์ง ๋ก๋ฉ ์ค์ผ ๋ <ComponentB>
๋ ์์ ์ ํด๋ฐฑ์ ํ์ํ์ง ์์ต๋๋ค. <ComponentB>
๊ฐ ์ฐจ์งํ์ ๊ณต๊ฐ์ ๋ ๋๋ง ์ค๋น๊ฐ ๋ ๋๊น์ง ์ถ์๋ฉ๋๋ค.
Suspense List ์ฌ์ฉ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
Suspense List๋ฅผ ์ฌ์ฉํ ๋ ๋ช ์ฌํด์ผ ํ ๋ช ๊ฐ์ง ๋ชจ๋ฒ ์ฌ๋ก๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ ์ ํ
revealOrder
์tail
๊ฐ์ ์ ํํ์ธ์. ์ํ๋ ๋ก๋ฉ ๊ฒฝํ์ ์ ์คํ๊ฒ ๊ณ ๋ คํ๊ณ ๋ชฉํ์ ๊ฐ์ฅ ์ ๋ง๋ ์ต์ ์ ์ ํํ์ธ์. ์๋ฅผ ๋ค์ด, ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ ๋ชฉ๋ก์๋revealOrder="forwards"
์tail="suspense"
๊ฐ ์ ์ ํ ์ ์์ง๋ง, ๋์๋ณด๋์๋revealOrder="together"
๊ฐ ๋ ๋์ ์ ํ์ผ ์ ์์ต๋๋ค. - ์๋ฏธ ์๋ ํด๋ฐฑ UI๋ฅผ ์ฌ์ฉํ์ธ์. ์ฌ์ฉ์์๊ฒ ์ฝํ ์ธ ๊ฐ ๋ก๋๋๊ณ ์์์ ๋ช ํํ๊ฒ ์ ๋ฌํ๋ ์ ์ตํ๊ณ ์๊ฐ์ ์ผ๋ก ๋งค๋ ฅ์ ์ธ ๋ก๋ฉ ํ์๊ธฐ๋ฅผ ์ ๊ณตํ์ธ์. ์ผ๋ฐ์ ์ธ ๋ก๋ฉ ์คํผ๋ ๋์ , ๋ก๋๋ ์ฝํ ์ธ ์ ๊ตฌ์กฐ๋ฅผ ๋ชจ๋ฐฉํ๋ ํ๋ ์ด์คํ๋๋ ์ค์ผ๋ ํค UI๋ฅผ ์ฌ์ฉํ์ธ์. ์ด๋ ์ฌ์ฉ์ ๊ธฐ๋๋ฅผ ๊ด๋ฆฌํ๊ณ ์ฒด๊ฐ ์ง์ฐ ์๊ฐ์ ์ค์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
- ๋ฐ์ดํฐ ํ์นญ์ ์ต์ ํํ์ธ์. Suspense List๋ ๊ธฐ๋ณธ ๋ฐ์ดํฐ ํ์นญ์ด ์๋ Suspense ๊ฒฝ๊ณ์ ๋ ๋๋ง๋ง ์กฐ์ ํฉ๋๋ค. ๋ก๋ฉ ์๊ฐ์ ์ต์ํํ๊ธฐ ์ํด ๋ฐ์ดํฐ ํ์นญ ๋ก์ง์ด ์ต์ ํ๋์๋์ง ํ์ธํ์ธ์. ์ฑ๋ฅ ํฅ์์ ์ํด ์ฝ๋ ์คํ๋ฆฌํ , ์บ์ฑ, ๋ฐ์ดํฐ ํ๋ฆฌํ์นญ๊ณผ ๊ฐ์ ๊ธฐ์ ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
- ์ค๋ฅ ์ฒ๋ฆฌ๋ฅผ ๊ณ ๋ คํ์ธ์. ๋ฐ์ดํฐ ํ์นญ ๋๋ ๋ ๋๋ง ์ค์ ๋ฐ์ํ ์ ์๋ ์ค๋ฅ๋ฅผ ์ ์์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด React์ ์ค๋ฅ ๊ฒฝ๊ณ(Error Boundaries)๋ฅผ ์ฌ์ฉํ์ธ์. ์ด๋ ์๊ธฐ์น ์์ ์ถฉ๋์ ๋ฐฉ์งํ๊ณ ๋ ๊ฐ๋ ฅํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค. ์ค๋ฅ ๊ฒฝ๊ณ๋ก Suspense ๊ฒฝ๊ณ๋ฅผ ๊ฐ์ธ ๊ทธ ์์์ ๋ฐ์ํ ์ ์๋ ๋ชจ๋ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ์ธ์.
- ์ฒ ์ ํ ํ ์คํธํ์ธ์. ๋ค์ํ ๋คํธ์ํฌ ์กฐ๊ฑด๊ณผ ๋ฐ์ดํฐ ํฌ๊ธฐ์์ Suspense List ๊ตฌํ์ ํ ์คํธํ์ฌ ๋ก๋ฉ ๊ฒฝํ์ด ์ผ๊ด๋๊ณ ๋ค์ํ ์๋๋ฆฌ์ค์์ ์ ์๋ํ๋์ง ํ์ธํ์ธ์. ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋๋ฆฐ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ์๋ฎฌ๋ ์ด์ ํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ๋๋ง ์ฑ๋ฅ์ ๋ถ์ํ์ธ์.
- SuspenseList๋ฅผ ๊น๊ฒ ์ค์ฒฉํ์ง ๋ง์ธ์. ๊น๊ฒ ์ค์ฒฉ๋ SuspenseList๋ ์ดํดํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ด๋ ค์์ง ์ ์์ต๋๋ค. ๊น๊ฒ ์ค์ฒฉ๋ SuspenseList๊ฐ ์๋ ๊ฒฝ์ฐ ์ปดํฌ๋ํธ ๊ตฌ์กฐ๋ฅผ ๋ฆฌํฉํ ๋งํ๋ ๊ฒ์ ๊ณ ๋ คํ์ธ์.
- ๊ตญ์ ํ(i18n) ๊ณ ๋ ค์ฌํญ: ๋ก๋ฉ ๋ฉ์์ง(ํด๋ฐฑ UI)๋ฅผ ํ์ํ ๋, ์ด๋ฌํ ๋ฉ์์ง๊ฐ ๋ค๋ฅธ ์ธ์ด๋ฅผ ์ง์ํ๋๋ก ์ ์ ํ๊ฒ ๊ตญ์ ํ๋์๋์ง ํ์ธํ์ธ์. ์ ํฉํ i18n ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ณ ๋ชจ๋ ๋ก๋ฉ ๋ฉ์์ง์ ๋ํ ๋ฒ์ญ์ ์ ๊ณตํ์ธ์. ์๋ฅผ ๋ค์ด, "Loading..."์ ํ๋์ฝ๋ฉํ๋ ๋์
i18n.t('loading.message')
์ ๊ฐ์ ๋ฒ์ญ ํค๋ฅผ ์ฌ์ฉํ์ธ์.
๊ณ ๊ธ ์ฌ์ฉ ์ฌ๋ก ๋ฐ ๊ณ ๋ ค์ฌํญ
Suspense List์ ์ฝ๋ ์คํ๋ฆฌํ ๊ฒฐํฉํ๊ธฐ
Suspense๋ ์ฝ๋ ์คํ๋ฆฌํ ์ ์ํ React.lazy์ ์ํํ๊ฒ ์๋ํฉ๋๋ค. Suspense List๋ฅผ ์ฌ์ฉํ์ฌ ์ง์ฐ ๋ก๋ฉ๋๋ ์ปดํฌ๋ํธ๊ฐ ํ์๋๋ ์์๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. ์ด๋ ํ์ํ ์ฝ๋๋ง ๋ฏธ๋ฆฌ ๋ก๋ํ๊ณ ๋๋จธ์ง ์ปดํฌ๋ํธ๋ ํ์์ ๋ฐ๋ผ ์ ์ง์ ์ผ๋ก ๋ก๋ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๊ธฐ ๋ก๋ ์๊ฐ์ ๊ฐ์ ํ ์ ์์ต๋๋ค.
Suspense List์ ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)
Suspense๋ ์ฃผ๋ก ํด๋ผ์ด์ธํธ ์ฌ์ด๋ ๋ ๋๋ง์ ์ค์ ์ ๋์ง๋ง, ์๋ฒ ์ฌ์ด๋ ๋ ๋๋ง(SSR)๊ณผ ํจ๊ป ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ช ๊ฐ์ง ์ค์ํ ๊ณ ๋ ค์ฌํญ์ด ์์ต๋๋ค. SSR๊ณผ ํจ๊ป Suspense๋ฅผ ์ฌ์ฉํ ๋, Suspense ๊ฒฝ๊ณ ๋ด์ ์ปดํฌ๋ํธ์ ํ์ํ ๋ฐ์ดํฐ๊ฐ ์๋ฒ์์ ์ฌ์ฉ ๊ฐ๋ฅํ์ง ํ์ธํด์ผ ํฉ๋๋ค. react-ssr-prepass
์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์์ Suspense ๊ฒฝ๊ณ๋ฅผ ์ฌ์ ๋ ๋๋งํ ๋ค์ ํด๋ผ์ด์ธํธ๋ก HTML์ ์คํธ๋ฆฌ๋ฐํ ์ ์์ต๋๋ค. ์ด๋ ์ฌ์ฉ์์๊ฒ ์ฝํ
์ธ ๋ฅผ ๋ ๋นจ๋ฆฌ ํ์ํ์ฌ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฒด๊ฐ ์ฑ๋ฅ์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
๋์ Suspense ๊ฒฝ๊ณ
์ด๋ค ๊ฒฝ์ฐ์๋ ๋ฐํ์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋์ ์ผ๋ก Suspense ๊ฒฝ๊ณ๋ฅผ ๋ง๋ค์ด์ผ ํ ์๋ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์์ ๊ธฐ๊ธฐ๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ ๋ฐ๋ผ ์กฐ๊ฑด๋ถ๋ก ์ปดํฌ๋ํธ๋ฅผ Suspense ๊ฒฝ๊ณ๋ก ๊ฐ์ธ๊ณ ์ถ์ ์ ์์ต๋๋ค. <Suspense>
์ปดํฌ๋ํธ์ ํจ๊ป ์กฐ๊ฑด๋ถ ๋ ๋๋ง ํจํด์ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
React Suspense List๋ ๋ก๋ฉ ์ํ๋ฅผ ์กฐ์ ํ๊ณ React ์ ํ๋ฆฌ์ผ์ด์
์ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ ํ๋ ๊ฐ๋ ฅํ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํฉ๋๋ค. revealOrder
์ tail
๊ฐ์ ์ ์คํ๊ฒ ์ ํํจ์ผ๋ก์จ ๋ ์ด์์ ์ํํธ์ ์๊ฐ์ ๋ถ์ผ์น๋ฅผ ์ต์ํํ๋ ๋ ๋ถ๋๋ฝ๊ณ ์์ธก ๊ฐ๋ฅํ ๋ก๋ฉ ๊ฒฝํ์ ๋ง๋ค ์ ์์ต๋๋ค. ๋ฐ์ดํฐ ํ์นญ์ ์ต์ ํํ๊ณ , ์๋ฏธ ์๋ ํด๋ฐฑ UI๋ฅผ ์ฌ์ฉํ๋ฉฐ, ๋ค์ํ ์๋๋ฆฌ์ค์์ Suspense List ๊ตฌํ์ด ์ ์๋ํ๋์ง ์ฒ ์ ํ ํ
์คํธํ๋ ๊ฒ์ ์์ง ๋ง์ธ์. Suspense List๋ฅผ React ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์ ํตํฉํจ์ผ๋ก์จ ์ ํ๋ฆฌ์ผ์ด์
์ ์ฒด๊ฐ ์ฑ๋ฅ๊ณผ ์ ๋ฐ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ํฌ๊ฒ ํฅ์์์ผ ์ ์ธ๊ณ ์ฌ์ฉ์๋ค์ด ๋ ๋งค๋ ฅ์ ์ด๊ณ ์ฆ๊ฒ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ๋ง๋ค ์ ์์ต๋๋ค.